//Pablo Estrada 12121
//Alberto Suriano 12281
//Mario Gomez 12165

import java.lang.*;

public class Candado1 implements iCandado {
    
    //atributos
    boolean estaBloqueado; //true está cerrado, false está abierto
    int[] combinacionCandado;
    int posicionActualArray;
    
    //Constructor predefinido
    public Candado1(){
        estaBloqueado=true;
        combinacionCandado= new int[4];
        combinacionCandado[0]=9;
        combinacionCandado[1]=0;
        combinacionCandado[2]=21;
        combinacionCandado[3]=0;
        posicionActualArray=0;
        
    }
    
    //Constructor overloaded
    public Candado1(int[] nuevaCombinacion){
        estaBloqueado=true;
        posicionActualArray=0;
        combinacionCandado=nuevaCombinacion;
    }
    
    //Métodos extendidos desde la interfaz
    
    //Método que verifica si el numero está dentro del array
    public boolean press(int numeroCandado) throws IllegalArgumentException {
        //Verificar si el número está dentro del parámetro permitido
        if (estaBloqueado!=false){
            if(numeroCandado>25 || numeroCandado<0){
               throw new IllegalArgumentException("ERROR: El valor ingresado está fuera del parámetro (0-25)");
            }
            //comprobar el numero ingresado con el que se encuentra en el array
            if (numeroCandado==combinacionCandado[posicionActualArray]){
                //Si la posicion actual del array aun esta dentro del parámetro permitido
                if (posicionActualArray<combinacionCandado.length){
                    posicionActualArray++;
                }
                //Verificando que el numero ingresado en la ultima casilla
                if (posicionActualArray==combinacionCandado.length){
                    estaBloqueado=false;
                }
                return true;   
            }
            //si no está en el array
            else{
                //regresar todo a su estado inicial
                reset();
                return false;
            }
        }
        //si el numero no está dentro de lo permitido
        else{
            //si ya el candado está abierto se procede haciendo nada
            return false;
        }     
    }
    
    //Método para regresar al candado a su estado inicial
    public void reset(){
        posicionActualArray=0;
    }
    
    //Método getEstaBloqueado
    public boolean isLocked(){
    
        return estaBloqueado;
    }
    
    //Método para poder reinicar el candado y ponerlo en sus estado inicial
    public void lock(){
        reset();
        estaBloqueado=true;
        
    }
    
    //Método para saber que candado es
    public int identify(){
    
        return 1;
    }
    
    
}
